package cn.wolfcode.mongo.repository;


import cn.wolfcode.mongo.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

/*
*类似于mybatis的接口：
* 1继承了MongoRepository
* 2添加了2个泛型,第一个泛型表示接口操作对象。第二个泛型表示对象的id类型
*
*UserRepository功能从何而来？
* UserRepository接口继承了MongoRepository，该接口又依次继承PagingAndSortingRepository，CrudRepository
* 所以UserRepository就拥有了crud与分页排序功能
*
* UserRepository无版型标签,业务实现类,为什么也可以使用?
* spring-data组件启动的使用,会去扫描Repository体系,通过代理方式创建所有继承了Repository接口实现类
* 然后交给spring容器管理
*
* */
public interface UserRepository extends MongoRepository<User,String>{
    User findByName(String name);


    User findByNameAndAge(String name,Integer age);

    List<User> findByNameOrAge(String name, Integer age);

    List<User> findByAgeBetween(Integer min,Integer max);

    List<User> findByAgeLessThan(Integer age);

    List<User> findByAgeLessThanEqual(Integer age);

    List<User> findByAgeGreaterThan(Integer age);

    List<User> findByAgeGreaterThanEqual(Integer age);

    List<User> findByNameIsNull();

    List<User> findByNameIsNotNull();

    List<User> findByNameLike(String name);

    List<User> findByNameNotLike(String name);

    List<User> findByNameStartingWith(String name);

    List<User> findByNameEndingWith(String name);

    List<User> findByNameContaining(String name);

    List<User> findByNameNot(String name);

    List<User> findByNameIn(List<String> names);

    List<User> findByNameNotIn(List<String> names);

    List<User> findByNameIgnoreCase(String name);
}
